home *** CD-ROM | disk | FTP | other *** search
- void main(void)
- {
- long oldA4;
- Handle initH = 0;
-
- oldA4 = SetCurrentA4();
- RememberA4();
-
- initH = Get1Resource('INIT', 333);
- if(initH)
- {
- HackInit();
- DetachResource(initH);
- }
-
- RestoreA4(oldA4);
- }
-
-
- void HackInit(void)
- {
- data = (DocPathDataHandle) NewHandleSys(sizeof(DocPathData));
- if(data)
- {
- (*data)->howManyWaitingFiles = 0;
- (*data)->howManyWaitingWindows = 0;
- (*data)->links = (WindowFileLinkHandle) NewHandleSys(0);
- (*data)->ignoringFiles = false;
-
- (*data)->oldDragWindow = NGetTrapAddress (_DragWindow, ToolTrap);
- NSetTrapAddress ((UniversalProcPtr)DragWindowStub, _DragWindow, ToolTrap);
-
- (*data)->oldCloseWindow = NGetTrapAddress (_CloseWindow, ToolTrap);
- NSetTrapAddress ((UniversalProcPtr)CloseWindowStub, _CloseWindow, ToolTrap);
-
- (*data)->oldSetWTitle = NGetTrapAddress (_SetWTitle, ToolTrap);
- NSetTrapAddress ((UniversalProcPtr)SetWTitleStub, _SetWTitle, ToolTrap);
-
- (*data)->oldOpen = NGetTrapAddress (_Open, OSTrap);
- NSetTrapAddress ((UniversalProcPtr)OpenStub, _Open, OSTrap);
-
- (*data)->oldOpenRF = NGetTrapAddress (_OpenRF, OSTrap);
- NSetTrapAddress ((UniversalProcPtr)OpenRFStub, _OpenRF, OSTrap);
-
- (*data)->oldHFSDispatch = NGetTrapAddress (_HFSDispatch, OSTrap);
- NSetTrapAddress ((UniversalProcPtr)HFSDispatchStub, _HFSDispatch, OSTrap);
-
- (*data)->oldNewCWindow = NGetTrapAddress (_NewCWindow, ToolTrap);
- NSetTrapAddress ((UniversalProcPtr)NewCWindowStub, _NewCWindow, ToolTrap);
-
- (*data)->oldNewWindow = NGetTrapAddress (_NewWindow, ToolTrap);
- NSetTrapAddress ((UniversalProcPtr)NewWindowStub, _NewWindow, ToolTrap);
-
- (*data)->oldFindWindow = NGetTrapAddress (_FindWindow, ToolTrap);
- NSetTrapAddress ((UniversalProcPtr)FindWindowStub, _FindWindow, ToolTrap);
-
- }
- }
-
-
- asm void DragWindowStub( void )
- {
-
- // Reserve space on the stack for real DragWindow address
- sub.l #4, SP
-
- // save registers
- movem.l A0-A5/D0-D7, -(SP)
-
- jsr SetUpA4
-
- // save real DragWindow address on the stack
- move.l data, A0
- move.l (A0), A0
- move.l 8(A0), 56(SP)
-
- // move HackDragWindow params on the stack
- move.l 64(SP),-(SP)
- move.l 72(SP),-(SP)
- move.l 80(SP),-(SP)
-
- jsr HackDragWindow
-
- TST.W D0
-
- // resotre stack pointer
- LEA 12(SP),SP
- movem.l (SP)+, A0-A5/D0-D7
-
- BNE.S *+4
-
- // forget about calling real DragWindow
- add.l #4, SP
-
- rts
- }
-